// encoding utf-8
#ifndef __QyGLViewWidget__
#define __QyGLViewWidget__

#include <QtGui/QGraphicsView>
#include <QtGui/QGraphicsScene>
#include <QyMath.h>
#include <QyGLSettings.h>

class QGLWidget;

/*! @defgroup QyOpenGL Набор вспомогательных утилит для OpenGL
*/

//! Пространство имен вспомагательных утилит для OpenGL
namespace QyGL {

class AbstractRender;
class ViewWidget;
// class ViewSettings;


/*! \brief Виджет - представление OpenGL сцены
\ingroup QyOpenGL

Виджет позволяет управлять обзором (камерой), нарисовать сцену, перевести рендер в режим выбора,
после чего получить буфер выбора для дальнейшего разбора, получить координаты курсора в плоскости XY.

Предполагается что "низ" сцены расположен по направления отрицательных значений оси Z.
Для конфигурации контекста и некоторыми другими параметрами используется класс
QyGL::ViewSettings.

Для отрисовки сцены используется рендер (класс QyGL::AbstractRender).

Выбор происходит по схеме:
- вызов beginSelect
- отрисовка сцены с именованием условных объектов (любые пользовательские функции)
- вызов endSelect, вернет кол-во попаданий
- получение буфера выбора при помощи selectBuffer
- разбор буфера выбора в соответствии с иерархией имен

\ingroup QyOpenGL
*/
class ViewWidget : public QGraphicsView {
public:
    explicit ViewWidget( QWidget * parent = 0 );
    explicit ViewWidget( const ViewSettings & viewSettings,
        QWidget * parent = 0 );
    virtual ~ViewWidget();

    QGLWidget * glWidget() const;
    ViewSettings viewSettings() const { return p_viewSettings; }

private:
    void init();
    void resizeEvent( QResizeEvent * event );

    QGLWidget * p_glWidget;
    ViewSettings p_viewSettings;

};

};

#endif//__QyGLViewWidget__
